package org.dark;

import io.netty.buffer.ByteBuf;
import io.netty.buffer.ByteBufAllocator;

/**
 * @author xiaozefeng
 * @date 2018/11/30 下午8:26
 */
public class ByteBufTest {
    public static void main(String[] args) {
        ByteBuf buffer = ByteBufAllocator.DEFAULT.buffer(9, 100);
        print("allocate ByteBuf(9,100)", buffer);

        buffer.writeBytes(new byte[]{1, 2, 3, 4});
        print("writeBytes(1,2,3,4)", buffer);

        buffer.writeInt(12);
        print("writeInt(12)", buffer);


        buffer.writeBytes(new byte[]{5});
        print("writeBytes(5)", buffer);

        // write 方法改变写指针，写的时候发现 buffer 不可写则开始扩容，扩容之后 capacity 随即改变
        buffer.writeBytes(new byte[]{6});
        print("writeBytes(6)", buffer);


        // get 不改变读写指针
        System.out.println("getByte(3), return:" + buffer.getByte(3));
        System.out.println("getShort(3), return:" + buffer.getShort(3));
        System.out.println("getInt(3), return:" + buffer.getInt(3));
        print("getByte()", buffer);

        // set 方法不改变读写指针
        buffer.setByte(buffer.readableBytes() + 1, 0);
        print("setByte()", buffer);

        // read 方法改变读指针
        byte[] dst = new byte[buffer.readableBytes()];
        buffer.readBytes(dst);
        print("readBytes()", buffer);

    }

    private static void print(String action, ByteBuf byteBuf) {
        System.out.println("after ============" + action + "=========");
        System.out.println("capacity():" + byteBuf.capacity());
        System.out.println("maxCapacity():" + byteBuf.maxCapacity());
        System.out.println("readerIndex():" + byteBuf.readerIndex());
        System.out.println("readableBytes():" + byteBuf.readableBytes());
        System.out.println("isReadable():" + byteBuf.isReadable());
        System.out.println("writerIndex():" + byteBuf.writerIndex());
        System.out.println("writableBytes():" + byteBuf.writableBytes());
        System.out.println("isWritable():" + byteBuf.isWritable());
        System.out.println("maxWritableBytes():" + byteBuf.maxWritableBytes());
        System.out.println();
    }
}
